+ [AFF-MIGRATION-102] Создать TBD

Реализация скрипта угасания интересов (Decay Strategy) для Крон-периода

Author

Services Task & Simulation Framework Documentation

Published

July 13, 2026

NoteКраткая карточка задачи
  • Репозиторий / Компонент: affinity-service (Домен Recommendation Domain).
  • Целевая СУБД: In-Memory Redis (affinity_db).
  • Ссылка на Метод: Спецификация метода
  • Статус: Готово к реализации

  • Инструкция по шагам: На Шаге 5 (системный Cron раз в сутки) во избежание бесконечного разрастания весов и переполнения RAM, необходимо выполнить итерационный пересчет матрицы. Разработать Lua-скрипт угасания связей: он считывает все элементы ZSET по маске, умножает текущий Score на коэффициент 0.95 и удаляет связи, чей вес деградировал ниже порогового значения < 0.1.
-- Lua-скрипт для ежедневного угасания весов (Шаг 5)
-- KEYS[1]: Точный ключ ZSET конкретного продукта пользователя
local key = KEYS[1]
local decay_factor = 0.95
local min_score_threshold = 0.1

-- 1. Считываем все элементы с их весами
local items = redis.call('ZRANGE', key, 0, -1, 'WITHSCORES')

for i = 1, #items, 2 do
    local member = items[i]
    local score = tonumber(items[i+1])
    local new_score = score * decay_factor
    
    if new_score < min_score_threshold then
        -- Удаляем из графа мертвую/неактивную связь
        redis.call('ZREM', key, member)
    else
        -- Перезаписываем обновленный угасший вес
        redis.call('ZADD', key, new_score, member)
    end
end
return true